﻿#pragma once
#include "zyCustomCtrol.h"
#include "zyPanel.h"
#include "zyLmageList.h"


namespace BlackMoonUI {

	class zyTabControl : public  zyCustomCtrol
	{
	public:
		zyTabControl();
		~zyTabControl();
		
		static void  WINAPI zyTabControl_Destroy(zyObject* obj);
		static LRESULT WINAPI zyTabControl_ChildWndProc(zyObject* obj, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL* bHandled);
		static LRESULT WINAPI zyTabControl_WndProc(zyObject* obj, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL* bHandled);
		BOOL 创建(HWND 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, 
			POINT 参数_尺寸 = POINT{ 60, 120 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		BOOL 创建(zyWindow& 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, 
			POINT 参数_尺寸 = POINT{ 60, 120 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		int 插入子夹(zyWindow* 参数_面板 = nullptr, int 参数_子夹索引 = -1, const std::wstring& 参数_子夹名称 = nullptr,
			int 参数_图片索引 = -1, const std::wstring& 参数_提示文本 = L"");
		int 添加子夹(zyWindow* 参数_面板, const std::wstring& 参数_子夹名称, int 参数_图片索引, const std::wstring& 参数_提示文本);
		HWND 取面板句柄(int 参数_子夹索引);
		int 取子夹数();
		bool 绑定(HWND 参数_父窗口, int 参数_资源ID, bool 参数_使用默认字体 = true);
		bool 绑定窗口句柄(HWND 参数_窗口句柄);
		int 取子夹行数();
		RECT 取子夹矩形(int 参数_子夹索引);
		std::wstring 取子夹名称(int 参数_子夹索引);
		bool 置子夹名称(int 参数_子夹索引, const std::wstring& 参数_子夹名称);
		bool 置提示文本(int 参数_子夹索引, const std::wstring& 参数_提示文本);
		std::wstring 取提示文本(int 参数_子夹索引);
		int 取子夹图片(int 参数_子夹索引);
		bool 置子夹图片(int 参数_子夹索引, int 参数_图片索引);
		bool 清空();
		bool 删除子夹(int 参数_子夹索引);
		int 取现行选中子夹();
		void 置现行选中子夹(int 参数_子夹索引);
		bool 高亮子夹(int 参数_子夹索引, bool 参数_是否高亮 = true);
		int 取坐标子夹(int 参数_横坐标, int 参数_纵坐标);
		int 置子夹头尺寸(int 参数_宽度, int 参数_高度);
		zyLmageList 取图片组();
		void 置图片组(zyLmageList& 参数_图片组);
		int 置选择夹扩展风格(int 参数_选择夹扩展风格); 
		int 取选择夹扩展风格() ;
		int 置子夹最小宽度(int 参数_最小宽度) ; 
		void 置子夹内边距(int 参数_水平边距, int 参数_垂直边距);
		bool 隐藏自身(bool 参数_隐藏自身);
		bool 隐藏自身();
		zyWindow* 取面板(int 参数_子夹索引);
		void 置面板边缘扩展(RECT& 参数_边缘扩展);
		void 重置面板尺寸() ; 
		//@备注 函数 整型 OnClick(HWND hWnd)
		void 事件_被单击(TRegEvent* 参数_事件指针) ; 
		//@备注 函数 整型 OnRClick(HWND hWnd)
		void 事件_右键单击(TRegEvent* 参数_事件指针) ; 
		//@备注 函数 整型 OnSelChange(HWND hWnd)
		void 事件_子夹被改变(TRegEvent* 参数_事件指针) ; 
		//@备注 返回值：整型【非0禁止改变，0允许改变】 函数 整型 OnSelChanging(HWND hWnd)
		void 事件_将改变子夹(TRegEvent* 参数_事件指针) ; 

	protected:

		void OnNCDestroy();
		void ShowPanel(HWND hWndTab, int index);
		void SetPanelSize(HWND hWndTab, LPARAM Panel);
		void SetPanelsSize(HWND hWndTab);
		bool DeleteAllPanel(HWND hWndTab);
		void DeletePanel(zyWindow* 参数_面板);
		bool LoadAndCheckManifest(HINSTANCE hInstance);
		bool ContainsString(const WCHAR* data, const WCHAR* searchString);
	};

}

